package com.duobaoyu.dby.supply.biz.client.boundary.order.bean.bo;

import com.duobaoyu.dby.channel.boundary.bean.order.pojo.OrderExtendParam;
import com.duobaoyu.dby.saas.product.common.base.json.TemplateJson;
import com.duobaoyu.dby.supply.common.biz.bo.area.ConsigneeInfo;
import com.duobaoyu.dby.supply.common.biz.bo.order.ElectricityFeesInfo;
import com.duobaoyu.dby.supply.common.biz.bo.order.RecipientInfo;
import com.duobaoyu.dby.supply.common.biz.bo.product.OrderProductParamExtendInfoBO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 返回订单信息
 *
 * @author fengshaoyu
 * @version 1.0.0
 * @date 2023/10/12 14:04
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class OrderSubmitBO {

	/**
	 * 提交成功的渠道订单
	 */
	private List<OrderSubmitBO.OrderInfo> orderInfoList;

	/**
	 * 失败的商品信息
	 */
	private List<ErrorOrderInfo> errorOrderList;

	@Data
	@Builder
	@NoArgsConstructor
	@AllArgsConstructor
	public static class OrderInfo {
		/**
		 * 订单类型
		 */
		private String orderType;
		/**
		 * 通道编号
		 */
		private String channelCode;
		/**
		 * 交易单
		 */
		private String channelTradeOrderSn;
		/**
		 * 渠道总运费
		 */
		private BigDecimal channelFreightAmount;
		/**
		 * 供应链订单号
		 */
		private String orderSn;
		/**
		 * 供应链三方交易单号
		 */
		private String orderTradeSn;
		/**
		 * 充值账号
		 */
		private String rechargeAccount;
		/**
		 * 收件人地址
		 */
		private ConsigneeInfo consigneeInfo;
		/**
		 * 收货人信息
		 */
		private RecipientInfo recipientInfo;
		/**
		 * 电费信息
		 */
		private ElectricityFeesInfo electricityFeesInfo;
		/**
		 * 扩展信息
		 */
		private OrderExtendParam extendParam;
		/**
		 * 订单创建时间,没有则默认返回
		 */
		private LocalDateTime orderCreateTime = LocalDateTime.now();
		/**
		 * sku
		 */
		private List<OrderSubmitBO.OrderInfo.SkuInfo> skuInfos;

		@Data
		@Builder
		@NoArgsConstructor
		@AllArgsConstructor
		public static class SkuInfo {
			/**
			 * 子订单
			 */
			private String channelOrderSn;
			/**
			 * 父单号
			 */
			private String channelOrderParentSn;
			/**
			 * skuCode
			 */
			private String skuCode;
			/**
			 * productCode
			 */
			private String productCode;
			/**
			 * 商品名称
			 */
			private String skuName;
			/**
			 * 商品税率
			 */
			private BigDecimal skuTaxRate;
			/**
			 * 商品编号
			 */
			private String channelSkuCode;
			/**
			 * 商品编号
			 */
			private String channelProductCode;
			/**
			 * 渠道SpecId (阿里必传)
			 */
			private String channelSpecId;
			/**
			 * 购买数量
			 */
			private int skuNum;
			/**
			 * SKU展示图
			 */
			private String skuPic;
			/**
			 * 三方code码
			 */
			private String channelCode;
			/**
			 * 商品类型 :real->实物商品；call->话费快充商品；coupon->卡券；recharge->直充商品；call_slow->话费慢充商品；electricity_fees_slow->电费慢充商品
			 */
			private String productType;
			/**
			 * 仓储类型,1:保税区邮、2:香港直邮、3:国内、4:法国直邮、5:澳门直邮、6:欧洲直邮、7:澳洲直邮、8:韩国直邮、9:美国直邮、10:日本直邮、11:德国直邮、12:新西兰直邮
			 */
			private Integer repositoryType;
			/**
			 * 渠道供应商
			 */
			private String channelSupplierId;
			/**
			 * 是否可开专票，1：支持，0：不支持
			 */
			private Integer canInvoice;
			/**
			 * 模版 （直充商品存在模板）
			 */
			private TemplateJson templateJson;
			/**
			 * 三级类目ID
			 */
			private Long thirdClassifyId;
			/**
			 * 三级类目名称
			 */
			private String thirdClassifyName;
			/**
			 * 原价(面额)
			 */
			private BigDecimal originalPrice;
			/**
			 * 商品单位
			 */
			private String unit;
			/**
			 * 销售属性
			 */
			private String saleAttributes;
			/**
			 * 平台销售价格
			 */
			private BigDecimal platformSellPrice;
			/**
			 * 平台成本价格
			 */
			private BigDecimal platformPrice;
			/**
			 * 商品价格
			 */
			private BigDecimal skuPrice;
			/**
			 * 未税价
			 */
			private BigDecimal channelNakedPrice;
			/**
			 * 渠道商品实际支付金额
			 */
			private BigDecimal channelPayAmount;
			/**
			 * 到账金额
			 */
			private BigDecimal actualAmount;
			/**
			 * 品牌ID
			 */
			private Long brandId;
			/**
			 * 品牌名称
			 */
			private String brandName;
			/**
			 * 1对内，2不对内
			 */
			private Integer insideStatus;
			/**
			 * 是否需要校验身份证
			 */
			private Boolean needVerifyIdentity;
			/**
			 * 商品额外信息
			 */
			private OrderProductParamExtendInfoBO orderProductParamExtendInfo;
		}
	}


	@Data
	@Builder
	@NoArgsConstructor
	@AllArgsConstructor
	public static class ErrorOrderInfo {
		/**
		 * 错误编码
		 */
		private Integer errorCode;
		/**
		 * 错误说明
		 */
		private String errorMessage;

		/**
		 * 异常数据
		 */
		private Object errorData;

		/**
		 * 错误商品编码
		 */
		private List<String> errorSkuCode;
	}
}
